home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / C / Snippets / FindIcon / Get_custom_file_icon.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-21  |  1.3 KB  |  50 lines  |  [TEXT/KAHL]

  1. #include <Finder.h>
  2. #include "Get_custom_file_icon.h"
  3. #include <exceptions.h>
  4. #include "Copy_each_icon.h"
  5. #include "Get_resource_icons.h"
  6. #include "Is_suite_empty.h"
  7.  
  8. /*    ------------------------------------------------------------------
  9.     Get_custom_file_icon        Fill a suite with the custom icon of a
  10.                                 specified file.
  11.     ------------------------------------------------------------------
  12. */
  13. /*
  14.     Custom icons numbered -16496 appear in aliases to volumes and
  15.     servers.  I don't know where this is documented.
  16. */
  17. #define    kVolumeAliasIconResource    -16496
  18.  
  19. OSErr    Get_custom_file_icon(
  20. /* --> */    FSSpec    *filespec,
  21. /* --> */    IconSelectorValue    icon_selector,
  22. /* <-- */    Handle    *the_suite
  23. )
  24. {
  25.     short    save_resfile, custom_resfile;
  26.     OSErr    err;
  27.     
  28.     save_resfile = CurResFile();
  29.     SetResLoad( false );
  30.     custom_resfile = FSpOpenResFile( filespec, fsRdPerm );
  31.     SetResLoad( true );
  32.     forbid_action( custom_resfile == -1, FSpOpenResFile,
  33.         err = ResError() );
  34.     
  35.     err = Get_resource_icons( the_suite, kCustomIconResource, icon_selector );
  36.     forbid( err, GetIconSuite );
  37.     
  38.     if (Is_suite_empty( *the_suite ))
  39.     {
  40.         err = Get_resource_icons( the_suite, kVolumeAliasIconResource,
  41.             icon_selector );
  42.     }
  43.     
  44. GetIconSuite:
  45.     CloseResFile( custom_resfile );
  46.     UseResFile( save_resfile );
  47. FSpOpenResFile:
  48.     return err;
  49. }
  50.